package com.config;


import com.netty.client.WebSocketClient;
import com.topsoft.common.RedisService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@EnableScheduling
@Slf4j
public class TimerSendMsg {
    /**
     * cron 按顺序依次为
     * 秒（0~59）
     * 分钟（0~59）
     * 小时（0~23）
     * 天（月）（0~31，但是你需要考虑你月的天数）
     * 月（0~11）
     * 天（星期）（1~7 1=SUN 或 SUN，MON，TUE，WED，THU，FRI，SAT）
     * 年份（1970－2099）
     * <p>
     * - 号表示范围, 逗号表示或者
     */

    /**
     * 释放内存
     * 7到23点这段时间内, 每5分钟 执行一次
     */

    //    @Scheduled(cron = "0/2 * * * * ?")    //每2秒执行一次
    //    @Scheduled(cron = "0/2 * 7-23 * * ?") //7点 到 23点  这段时间内, 每2秒执行一次
    //    @Scheduled(cron = "0/2 * 7,23 * * ?") //7点 或 23点(7:00:00到7:59:59内每2秒执行一次, 或 23:00:00到23:59:59内每2秒执行一次)
    //    @Scheduled(cron = "0 0/5 7-23 * * ?") //7到23点这段时间内, 每5分钟 执行一次
    //    @Scheduled(cron = "0/2 * * * * ?")    //每2秒执行一次


    @Autowired
    @Qualifier("redisTemplateMessage")
    RedisTemplate<String, String> redisTemplate;

    @Autowired MessageTemplate messageTemplate;

    @Autowired RedisService redisService;
    @Scheduled(cron = "0/2 * * * * ?")    //每2秒执行一次
    public void sendMessage() {
        System.out.println();
        //取出Redis list:* 队列中的消息, 发送到目的队列
        ListOperations<String, String> listOperations = redisTemplate.opsForList();
        redisService.keys("list:*").forEach(listQueue->{
            // listQueue = list:test
            String queue = listQueue.substring(listQueue.indexOf(":")+1);
            Long size = listOperations.size(listQueue);
            List<String> listRedisKeys = listOperations.range(listQueue,0, size);
            List<String> listMessage   = redisService.get(listRedisKeys);
            log.debug("获得消息队列{} 共计{}条数据",queue, size);

            //这里应该开启异步线程发送消息
            WebSocketClient.sendMessage(queue, listMessage);
            //messageTemplate.sendMessage(queue, listMessage);

        });
    }
}